// 之前的爬楼梯最多能爬两个台阶，如果最多能爬m个台阶，那就相当于是m个物品，每个物品可以重复取用，和上一题基本是同样的题了
// 思路，动态规划
// 1. dp数组，`dp[i]`，爬到i个台阶，有多少种方法
// 2. 递推公式，`dp[i] += dp[i - j]`
// 3. dp初始化，`dp[0] = 1`
// 4. 遍历顺序，相当于背包里求排列问题，将目标n外循环，爬台阶数m内层循环，从前往后遍历
// 5. 举例推导

// n,相当于背包大小，m相当于最多能爬m个台阶
function fun(n, m) {
    let dp = new Array(n + 1).fill(0)
    dp[0] = 1
    for (let i = 0; i <= n; i++) {
        for (let j = 1; j <= m; j++) {
            if (i >= j) {
                dp[i] += dp[i - j]
            }
        }        
    }
    return dp[n]
}

console.log(fun(3, 2))
